home *** CD-ROM | disk | FTP | other *** search
/ Assassins - Ultimate CD Games Collection 4 / Assassins 4 (1999)(Weird Science).iso / misc / omega / source / command1.c < prev    next >
C/C++ Source or Header  |  1997-05-02  |  9KB  |  341 lines

  1. /* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
  2. /* command1.c */
  3.  
  4. /* This file has the two toplevel command scanners, p_process,
  5. which works everywhere but the countryside, and p_couyntry_process,
  6. which works.... */
  7.  
  8. #include "glob.h"
  9.  
  10.  
  11. /* deal with a new player command in dungeon or city mode*/
  12. void p_process()
  13. {
  14.   static int searchval=0;
  15.  
  16.   if (Player.status[BERSERK]) 
  17.     if (goberserk()) {
  18.     setgamestatus(SKIP_PLAYER);
  19.     drawvision(Player.x,Player.y);
  20.   }
  21.   if (! gamestatusp(SKIP_PLAYER)) {
  22.     if (searchval > 0) {
  23.       searchval--;
  24.       if (searchval == 0) resetgamestatus(FAST_MOVE);
  25.     }
  26.     drawvision(Player.x,Player.y);
  27.     if (! gamestatusp(FAST_MOVE)) {
  28.       searchval = 0;
  29.       Cmd = mgetc();
  30.       clear_if_necessary();
  31.     }
  32.     Command_Duration = 0;
  33.     switch (Cmd) {
  34.     case ' ': 
  35.     case 13: setgamestatus(SKIP_MONSTERS); break; /*no op on space or return*/
  36.     case 6: abortshadowform(); break; /* ^f */
  37.     case 7: wizard(); break; /* ^g */
  38.     case 9: display_pack(); morewait(); xredraw(); break; /* ^i */
  39.     case 11: if (gamestatusp(CHEATED)) frobgamestatus();
  40.     case 12: xredraw(); setgamestatus(SKIP_MONSTERS); break; /* ^l */
  41. #ifndef MSDOS
  42.     case 16: bufferprint(); setgamestatus(SKIP_MONSTERS); break; /* ^p */ 
  43. #else
  44.     case 15: bufferprint(); setgamestatus(SKIP_MONSTERS); break; /* ^o */ 
  45. #endif
  46.     case 18: redraw();  setgamestatus(SKIP_MONSTERS); break; /* ^r */
  47.     case 23: if (gamestatusp(CHEATED)) drawscreen();  break; /* ^w */
  48.     case 24: /* ^x */ 
  49.       if (gamestatusp(CHEATED) || 
  50.       Player.rank[ADEPT]) 
  51.     wish(1);
  52.       Command_Duration = 5;
  53.       break;
  54.     case 'a': zapwand();
  55.       Command_Duration = Player.speed*8/5; 
  56.       break;
  57.     case 'c': closedoor();  
  58.       Command_Duration = Player.speed*2/5; 
  59.       break;
  60.     case 'd': drop();
  61.       Command_Duration = Player.speed*5/5; 
  62.       break;
  63.     case 'e': eat();
  64.       Command_Duration = 30;
  65.       break;
  66.     case 'f': fire();
  67.       Command_Duration = Player.speed*5/5; 
  68.       break;
  69.     case 'g': pickup();
  70.       Command_Duration = Player.speed*10/5; 
  71.       break;
  72.     case 'i': 
  73.       if (optionp(TOPINV)) top_inventory_control();
  74.       else {
  75.     display_possessions();
  76.     inventory_control();
  77.       }
  78.       break;
  79.     case 'm': magic();
  80.       Command_Duration = 12;
  81.       break;
  82.     case 'o': opendoor();
  83.       Command_Duration = Player.speed*5/5; 
  84.       break;
  85.     case 'p': pickpocket();
  86.       Command_Duration = Player.speed*20/5; 
  87.       break;
  88.     case 'q': quaff();
  89.       Command_Duration = 10;
  90.       break;
  91.     case 'r': peruse();
  92.       Command_Duration = 20;
  93.       break;
  94.     case 's': search(&searchval);
  95.       Command_Duration = 20;
  96.       break;
  97.     case 't': talk();
  98.       Command_Duration = 10;
  99.       break;
  100.     case 'v': vault();
  101.       Command_Duration = Player.speed*10/5; 
  102.       break;
  103.     case 'x': examine();
  104.       Command_Duration = 1;
  105.       break;
  106.     case 'z': bash_location();
  107.       Command_Duration = Player.speed*10/5; 
  108.       break;
  109.     case 'A': activate();
  110.       Command_Duration = 10;
  111.       break;
  112.     case 'C': callitem();
  113.       break;
  114.     case 'D': disarm();
  115.       Command_Duration = 30;
  116.       break;
  117.     case 'E': dismount_steed();
  118.       Command_Duration = Player.speed*10/5; 
  119.       break;
  120.     case 'F': tacoptions();
  121.       break;
  122.     case 'G': give();
  123.       Command_Duration = 10;
  124.       break;
  125.     case 'I':
  126.       if (! optionp(TOPINV)) top_inventory_control();
  127.       else {
  128.     display_possessions();
  129.     inventory_control();
  130.       }
  131.       break;
  132.     case 'M': city_move();
  133.       Command_Duration = 10;
  134.       break;
  135.     case 'O': setoptions();
  136. #if defined(AMIGA) || defined(MSDOS)
  137.       show_screen();
  138.       xredraw();
  139. #endif
  140.       break;
  141.     case 'P': show_license();
  142.       break; /* actually show_license is in file.c */
  143.     case 'Q': quit(); 
  144.       break;
  145.     case 'R': rename_player();
  146.       break;
  147.     case 'S': save(optionp(COMPRESS_OPTION), FALSE);
  148.       break;
  149.     case 'T': tunnel(); 
  150.       Command_Duration =  Player.speed*30/5; 
  151.       break;
  152.     case 'V': version(); 
  153.       break;
  154. #ifdef MSDOS
  155.     case 'X': check_memory(); break;
  156. #endif
  157.     case 'Z': bash_item();
  158.       Command_Duration = Player.speed*10/5; 
  159.       break;
  160.     case '.': rest();
  161.       Command_Duration = 10;
  162.       break;
  163.     case ',': 
  164.       Command_Duration = 10;
  165.       nap();
  166.       break;
  167.     case '>': 
  168.       downstairs();
  169.       break;
  170.     case '<':
  171.       upstairs();
  172.       break;
  173.     case '@': 
  174.       p_movefunction(Level->site[Player.x][Player.y].p_locf);
  175.       Command_Duration = 5; 
  176.       break;
  177.     case '/': charid(); setgamestatus(SKIP_MONSTERS);
  178.       break;
  179.     case '?': help(); setgamestatus(SKIP_MONSTERS);
  180.       break;
  181.     case '4':           
  182.     case 'h': moveplayer(-1,0);
  183.       Command_Duration = Player.speed*5/5; 
  184.       break;
  185.     case '2':
  186.     case 'j': moveplayer(0,1);  
  187.       Command_Duration = Player.speed*5/5; 
  188.       break;
  189.     case '8':
  190.     case 'k': moveplayer(0,-1);
  191.       Command_Duration = Player.speed*5/5; 
  192.       break;
  193.     case '6':
  194.     case 'l': moveplayer(1,0);
  195.       Command_Duration = Player.speed*5/5; 
  196.       break;
  197.     case '1':
  198.     case 'b': moveplayer(-1,1);
  199.       Command_Duration = Player.speed*5/5; 
  200.       break;
  201.     case '3':          
  202.     case 'n': moveplayer(1,1); 
  203.       Command_Duration = Player.speed*5/5; 
  204.       break;
  205.     case '7':
  206.     case 'y': moveplayer(-1,-1);  
  207.       Command_Duration = Player.speed*5/5; 
  208.       break;
  209.     case '9':
  210.     case 'u': moveplayer(1,-1);  
  211.       Command_Duration = Player.speed*5/5; 
  212.       break;
  213.     case '5': 
  214.       setgamestatus(SKIP_MONSTERS); /* don't do anything; a dummy turn */
  215.       Cmd = mgetc();
  216.       while ((Cmd != ESCAPE) &&
  217.          ((Cmd < '1') || (Cmd > '9') || (Cmd=='5'))) {
  218.     print3("Run in keypad direction [ESCAPE to abort]: ");
  219.     Cmd = mgetc();
  220.       }
  221.       if (Cmd != ESCAPE) setgamestatus(FAST_MOVE);
  222.       break;
  223.     case 'H': setgamestatus(FAST_MOVE); Cmd = 'h'; moveplayer(-1,0);
  224.       Command_Duration = Player.speed*4/5; 
  225.       break; 
  226.     case 'J': setgamestatus(FAST_MOVE); Cmd = 'j'; moveplayer(0,1);
  227.       Command_Duration = Player.speed*4/5; 
  228.       break;  
  229.     case 'K': setgamestatus(FAST_MOVE); Cmd = 'k'; moveplayer(0,-1);
  230.       Command_Duration = Player.speed*4/5; 
  231.       break; 
  232.     case 'L': setgamestatus(FAST_MOVE); Cmd = 'l'; moveplayer(1,0);
  233.       Command_Duration = Player.speed*4/5; 
  234.       break;  
  235.     case 'B': setgamestatus(FAST_MOVE); Cmd = 'b'; moveplayer(-1,1);
  236.       Command_Duration = Player.speed*4/5; 
  237.       break; 
  238.     case 'N': setgamestatus(FAST_MOVE); Cmd = 'n'; moveplayer(1,1);
  239.       Command_Duration = Player.speed*4/5; 
  240.       break;  
  241.     case 'Y': setgamestatus(FAST_MOVE); Cmd = 'y'; moveplayer(-1,-1);  
  242.       Command_Duration = Player.speed*4/5; 
  243.       break;
  244.     case 'U': setgamestatus(FAST_MOVE); Cmd = 'u'; moveplayer(1,-1);
  245.       Command_Duration = Player.speed*4/5; 
  246.       break;
  247.     default: commanderror();  setgamestatus(SKIP_MONSTERS); break;
  248.     }
  249.   }
  250.   if (Current_Environment != E_COUNTRYSIDE) roomcheck();
  251.   screencheck(Player.y);
  252. }
  253.  
  254.  
  255.  
  256.  
  257.  
  258. /* deal with a new player command in countryside mode */
  259. void p_country_process()
  260. {
  261.   int no_op;
  262.   
  263.   drawvision(Player.x,Player.y);
  264.   do {
  265.     no_op = FALSE;
  266.     Cmd = mgetc();
  267.     clear_if_necessary();
  268.     switch (Cmd) {
  269.     case ' ': 
  270.     case 13: no_op = TRUE; break;
  271.     case 7: wizard(); break; /* ^g */
  272.     case 12: xredraw(); no_op = TRUE; break; /* ^l */
  273. #ifndef MSDOS
  274.     case 16: bufferprint(); no_op = TRUE; break; /* ^p */ 
  275. #else
  276.     case 15: bufferprint(); no_op = TRUE; break; /* ^o */ 
  277. #endif
  278.     case 18: redraw(); no_op = TRUE; break; /* ^r */
  279.     case 23: if (gamestatusp(CHEATED)) drawscreen();  break; /* ^w */
  280.     case 24: if (gamestatusp(CHEATED) || 
  281.          Player.rank[ADEPT]) wish(1);  break; /* ^x */
  282.     case 'd': drop();  break;
  283.     case 'e': eat();  break;
  284.     case 'i': 
  285.       if (optionp(TOPINV)) top_inventory_control();
  286.       else {
  287.     menuclear();
  288.     display_possessions();
  289.     inventory_control();
  290.       }
  291.       break;
  292.     case 's': countrysearch(); break;
  293.     case 'x': examine(); break;
  294.     case 'E': dismount_steed(); break;
  295.     case 'H': hunt(Country[Player.x][Player.y].current_terrain_type); break;
  296.     case 'I': 
  297.       if (! optionp(TOPINV)) top_inventory_control();
  298.       else {
  299.     menuclear();
  300.     display_possessions();
  301.     inventory_control();
  302.       }
  303.       break;
  304.     case 'O': setoptions(); break;
  305.     case 'P': show_license(); break; /* actually show_license is in file.c */
  306.     case 'Q': quit(); break;
  307.     case 'R': rename_player(); break;
  308.     case 'S': save(optionp(COMPRESS_OPTION), FALSE); break;
  309.     case 'V': version(); break;
  310. #ifdef MSDOS
  311.     case 'X': check_memory(); break;
  312. #endif
  313.     case '>': 
  314.       enter_site(Country[Player.x][Player.y].base_terrain_type);
  315.       break;
  316.     case '/': charid(); no_op = TRUE; break;
  317.     case '?': help(); no_op = TRUE; break;
  318.     case '4':           
  319.     case 'h': movepincountry(-1,0);  break;
  320.     case '2':
  321.     case 'j': movepincountry(0,1);  break;
  322.     case '8':
  323.     case 'k': movepincountry(0,-1);  break;
  324.     case '6':
  325.     case 'l': movepincountry(1,0);  break;
  326.     case '1':
  327.     case 'b': movepincountry(-1,1);  break;
  328.     case '3':          
  329.     case 'n': movepincountry(1,1);  break;
  330.     case '7':
  331.     case 'y': movepincountry(-1,-1);  break;
  332.     case '9':
  333.     case 'u': movepincountry(1,-1);  break;
  334.     default: commanderror();  no_op = TRUE; break;
  335.     }
  336.   } while (no_op);
  337.   screencheck(Player.y);
  338. }
  339.  
  340.  
  341.